﻿
function clone(src) {
    function mixin(dest, source, copyFunc) {
        var name, s, i, empty = {};
        for (name in source) {
            // the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source"
            // inherited from Object.prototype.   For example, if dest has a custom toString() method,
            // don't overwrite it with the toString() method that source inherited from Object.prototype
            s = source[name];
            if (!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))) {
                dest[name] = copyFunc ? copyFunc(s) : s;
            }
        }
        return dest;
    }

    if (!src || typeof src != "object" || Object.prototype.toString.call(src) === "[object Function]") {
        // null, undefined, any non-object, or function
        return src;  // anything
    }
    if (src.nodeType && "cloneNode" in src) {
        // DOM Node
        return src.cloneNode(true); // Node
    }
    if (src instanceof Date) {
        // Date
        return new Date(src.getTime());  // Date
    }
    if (src instanceof RegExp) {
        // RegExp
        return new RegExp(src);
    }
    var r, i, l;
    if (src instanceof Array) {
        // array
        r = [];
        for (i = 0, l = src.length; i < l; ++i) {
            if (i in src) {
                r.push(clone(src[i]));
            }
        }
    } else {
        // generic objects
        r = src.constructor ? new src.constructor() : {};
    }
    return mixin(r, src, clone);
}

var UploadFileModel = new function () {
    this.DisplayFirstView = ko.observable(true);
};

$(function () {
    $("#fileUpload").uploadify({
        'auto': false,
        'multi': false,
        'buttonText': 'Upload Leads',
        'buttonClass': 'btn btn-upload-leads',
        'width': 107,
        'height': 35,
        'fileTypeDesc': 'Excel Sheet',
        'fileTypeExts': '*.xls; *.xlsx; *.csv',
        'fileSizeLimit': '4194304B',
        'swf': '/Images/uploadify.swf',
        'scriptData': { 'token': tokenValue },
        'uploader': '/LeadImport/Upload?token=' + tokenValue,
        'successTimeout': 200,
        'onCancel': function (file) {

        },
        'onSelect': function (file) {
            $('#StatusMessage').html("Chọn <strong>Tiếp tục</strong> tới bước 2.  (Nếu bạn muốn tải lên một tài liệu khác, bạn có thể xóa tài liệu này và tải lên một tài liệu mới.)");

            $('#fileUpload').uploadify('disable', true);

            $('#Ms_successful').html("<span id='wrappfilename'><strong>Tên tài liệu: </strong>" + file.name + "</span>" + "<a id='DeleteFile' href=\"javascript:DeleteUpload();\" class='btn btn-x'>X</a>")
				.css("display", "inline-block");

            // not able to click on "Upload leads" button
            $('#fileUpload-button').removeClass('btn-upload-leads').addClass('btn-upload-leads-gray');

            var h = $('#wrappfilename').height();
            if (h > 15) {
                $('#DeleteFile').css("top", -5);
                $('#DeleteFile').css("left", 10);
                $('#Ms_successful').css("padding-right", 20);

            }
            // able to click on "Continue" button
            $('#BtnContinue').removeClass('btn-continue-gray').addClass('btn-continue-blue').attr("onclick", "javascript:UploadFile();");
        },

        'onUploadSuccess': function (file, data, response) {
            $.fancybox.close();
            var jsonData = jQuery.parseJSON(data);
            if (jsonData == null || jsonData.IsError) {
                UploadFileModel.DisplayFirstView(true);
                showCustomError(jsonData.ErrorMessage);
                HelpModel.DisplayHelp(false);
                MappingModel.DisplaySecondView(false);
                ReviewImportModel.DisplayThirdView(false);
                DeleteUpload();
            }
            else {
                var StoreFilePath = jsonData.StoreFilePath;
                $('#StoreManualID').val(StoreFilePath);
                UploadFileModel.DisplayFirstView(false);
                HelpModel.DisplayHelp(true);
                MappingModel.DisplaySecondView(false);
                ReviewImportModel.DisplayThirdView(false);
            }
        },
        'onUploadError': function (file, errorCode, errorMsg, errorString) {
            $.fancybox.close();
            UploadFileModel.DisplayFirstView(true);
            HelpModel.DisplayHelp(false);
            MappingModel.DisplaySecondView(false);
            ReviewImportModel.DisplayThirdView(false);

            if (errorCode && $.trim(errorCode.toString()) != "-280") {
                showCustomError('Tên tài liệu ' + file.name + ' không thể tải lên: Mã lỗi ' + errorCode + ' Chuỗi lỗi: ' + errorString);
            }
            DeleteUpload();
        },
        'onSelectError': function (file, errorCode, errorMsg) {
            if (errorCode == FILE_EXCEEDS_SIZE_LIMIT) {
                $('#Ms_successful').html("Tài liệu " + file.name + " vượt quá dung lượng - 4MB")
					.css("display", "inline-block");
            }
            else {
                showCustomError('Tài liệu ' + file.name + ' đã trả lại một lỗi và không được thêm. Lỗi:' + errorMsg);
            }
        }
    });
});

function DeleteUpload() {
    $('#StatusMessage').html("Để nhập một danh sách khách hàng, trước tiên bạn tải danh sách khách hàng lên (xin hãy nhìn thông tin trợ giúp bên phải). Chúng tôi sẽ hướng dẫn bạn thông qua việc xử lý các cột của bạn và tiêu đề của chúng tôi, và lưu ý rằng bạn có thể có một vài lỗi được tìm thấy trong tài liệu.");

    $('#fileUpload').uploadify('cancel');
    $('#fileUpload').uploadify('disable', false);

    $('#Ms_successful').html("").css("display", "none");
    $('#fileUpload-button').removeClass('btn-upload-leads-gray').addClass('btn-upload-leads');
    $('#BtnContinue').removeClass('btn-continue-blue').addClass('btn-continue-gray').removeAttr("onclick");
}

function UploadFile() {
    $(".fancybox-skin").show();
    $("#fancybox-overlay").show();
    $("#fancybox-overlay").css("opacity", "0.8");
    $.fancybox($('#popup-processing-importleads'),
    {
        padding: 0,
        closeBtn: false,
        helpers: {
            overlay:
            {
                opacity: 0.8,
                css: { 'background-color': '#11619d' },
                closeClick: false
            }
        }
    });

    $('#fileUpload').uploadify('upload');

}